﻿using System.Collections;
using System.Collections.Generic;
using System.Data.Objects;
using System.Linq;
using RazakiBLL.Entities;

namespace RazakiBLL.Managers
{
    public class NewRps : RpsRazaki<New>
    {
        public NewRps(ObjectContext context)
            : base(context)
        {
        }

        public List<New> GetAllByTagId(short tagId)
        {
            var result = (from n in _objectSet where n.TagId == tagId select n).ToList();

            return result;
        }

        public IList GetAllByFirstParentId(NewTagRps newTagRps, short parentId)
        {
            var childernInSameRoot = newTagRps.GetChildernInSameRoot(parentId);

            var result = (from nT in childernInSameRoot
                          orderby nT.Key
                          select new
                          {
                              TagId = nT.Value,
                              TagQueueDesc = nT.Key,
                              NewInfo = (from n in _objectSet
                                         where n.TagId == nT.Value
                                         orderby n.UpdateDate descending
                                         select new
                                         {
                                             NewId = n.Id,
                                             n.Title,
                                             n.UserId,
                                             n.ViewCount,
                                             n.UpdateDate
                                         })
                          }).ToList();

            return result;
        }

        /// <summary>
        /// این متد تنها در مشاهده خبر بکار رفته است.
        /// باید به تعداد مشاهده یکی افزوده شود.
        /// </summary>
        /// <param name="newId"></param>
        /// <returns></returns>
        public dynamic GetNewInfoById(NewTagRps newTagRps, int newId)
        {
            New newEntity = GetById(newId);

            var result = new
            {
                newEntity.Title,
                newEntity.TagId,
                //مشاهده کاربر جاری
                ViewCount = newEntity.ViewCount + 1,
                newEntity.UpdateDate,
                newEntity.Text,
                newEntity.UserId,
                newEntity.Publisher,
                TagQueueDesc = newTagRps.GetDescQueue(newEntity.TagId)
            };

            return result.ExpandoRecord();
        }

        /// <summary>
        /// باید عمل ذخیره بعد از فراخوانی توسط
        /// UowRazaki
        /// صورت گیرد
        /// </summary>
        /// <param name="newId"></param>
        public void ViewCountPlusOne(int newId)
        {
            New item = GetById(newId);

            item.ViewCount += 1;
        }
    }
}
